﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using skhukb.Util;
using skhukb.DB;
using skhukb.BL;

namespace skhukb.Controllers
{
    public class ForestController : Controller
    {
        public ActionResult Index()
        {
            string s1 = "300094";
            string s2 = DateTime.Now.ToString("yyyyMMddHHmmss");
            string s3 = "SSS001";
            string p1 = CryptographyHelper.CookieEncrypt(s1);
            string p2 = CryptographyHelper.CookieEncrypt(s2);
            string p3 = CryptographyHelper.CookieEncrypt(s3);
            return Redirect(string.Format("/Forest/Link?p1={0}&p2={1}&p3={2}", p1, p2, p3));
        }

        private DateTime parseDateTime(string s2)
        {
            var y = int.Parse(s2.Substring(0, 4));
            var M = int.Parse(s2.Substring(4, 2));
            var d = int.Parse(s2.Substring(6, 2));
            var H = int.Parse(s2.Substring(8, 2));
            var m = int.Parse(s2.Substring(10, 2));
            var s = int.Parse(s2.Substring(12, 2));

            return new DateTime(y, M, d, H, m, s);
        }

        public ActionResult Test(string p1, string p2, string p3, string p4)
        {

            string ep1 = CryptographyHelper.CookieEncrypt(p1);
            string ep2 = CryptographyHelper.CookieEncrypt(p2);
            string ep3 = CryptographyHelper.CookieEncrypt(p3);

            string ep4 = CryptographyHelper.CookieEncrypt(p4);
            return Redirect(string.Format("/Forest/Link?p1={0}&p2={1}&p3={2}&p4={3}", ep1, ep2, ep3, ep4));
        }

        public ActionResult Link(string p1, string p2, string p3, string p4)
        {
            var 사용자ID = CryptographyHelper.CookieDecrypt(p1);
            //var 시각 = parseDateTime(CryptographyHelper.CookieDecrypt(p2));
            var 시각 = parseDateTime(CryptographyHelper.CookieDecrypt(p2));
            var 주제코드 = CryptographyHelper.CookieDecrypt(p3);
            var 제목 = CryptographyHelper.CookieDecrypt(p4).Replace('/',',');


            if (DateTime.Now.Subtract(시각).Seconds > 60)
                return HttpNotFound();

            if (현재사용자.Forest로그인(사용자ID) == false)
                return HttpNotFound();

            if (주제코드.Contains("/") != true)
                return HttpNotFound();

            if (제목.Contains("\\") == true)
                return HttpNotFound();

            using (var db = new DBDataContext())
            {

                // 주제 Process
                var 주제목록 = 주제파싱(주제코드);

                var FOREST_ROOT = db.주제.FirstOrDefault(p => p.코드 == "FOREST_ROOT");
                주제 마지막주제 = null;
                
                var 상위주제목록 = new List<주제>();

                var 누적제목 = "/";
                var 총코드 = "/";

                for (int i = 0; i < 주제목록.Length; i++)
                {
                    var 해당주제코드 = 총코드 + 주제목록[i];                    
                    var 주 = db.주제.FirstOrDefault(p => p.코드 == 해당주제코드);

                    if (주 == null)
                    {
                        var 상위주제 = db.주제.FirstOrDefault(p => p.코드 == (i == 0 ? "FOREST_ROOT" : 마지막주제.코드));
                        var 형제주제 = db.주제.Where(p => p.상위주제.코드 == 상위주제.코드);
                        int 번호 = (형제주제 == null || 형제주제.Count() == 0) ? 1 : 형제주제.Max(p => p.번호) + 1;
                        var 총제목 = 누적제목 + (i + 1 == 주제목록.Length ? 제목 : 주제목록[i]);
                        var 주제제목 = (i + 1 == 주제목록.Length ? 제목 : 주제목록[i]);

                        주 = new 주제 { 상위주제ID = 상위주제.ID, 제목 = 주제제목, 코드 = 해당주제코드, 번호 = 번호, 총제목 = 총제목 };
                        db.주제.InsertOnSubmit(주);
                        db.SubmitChanges();
                    }

                    누적제목 += 주.제목 + "/";
                    총코드 = 주.코드 + "/";
                    마지막주제 = 주;
                    상위주제목록.Add(주);
                }
                 
                return Redirect(Url.SubjectDetail(마지막주제.ID));
            }
        }

        private string[] 주제파싱(String 코드)
        {
            var arr = 코드.Split('/');

            string[] 상위주제 = new string[arr.Length - 1];
           
            int idx = 0;
            for (int i = 1; i < arr.Length; i++)
            {
                상위주제[idx++] = arr[i];
            }         
            
            return 상위주제;
        }



    }
}
